package com.jcai.middlend.codegenerator.annotation;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * 保存了数字值和对应的字体串描述的枚举接口.
 * <p>Base class of IntegerEnum</p>
 * @author guodu
 * @date 2019年5月28日 0028
 */
public interface IntegerEnum<T extends IntegerEnum<?>> {

  /**
   * 返回这个枚举的数字值（不是Ordinal值）
   *
   * @return byte value of this enum
   */
  @JsonValue
  Number getValue();

  /**
   * 获取枚举的 属性中的值
   *
   * @return
   */
  String attributeName();


  /**
   * From byte to Enum
   *
   * @param enumType type of enum
   * @param i        int value
   * @return IntegerEnum
   */
  static <EnumType extends IntegerEnum> EnumType valueOf(Class<EnumType> enumType, Number i) {
    for (EnumType ele : enumType.getEnumConstants()) {
      if (ele.getValue().equals(i)) {
        return ele;
      }
    }
    return null;
  }

}
